Improved data reliability and endurance are important design goals for any storage system. Endurance may be expressed, for example, as a number of read/write cycles or maximum erase counts in solid-state disks, and sector error rates in hard disk drives. Data reliability is often improved by implementing improved signal processing or encoding and decoding algorithms in a read channel, such as an Application Specific Integrated Circuit (ASIC) or Intellectual Property (IP) core within a System-on-Chip (SoC). On a system level, data reliability can be improved by storing files in a redundant manner. For example, a number of storage systems employ a Redundant Array of Independent Disks (RAID). RAID storage systems provide a high level of storage reliability by arranging a plurality of storage devices into arrays for redundancy. Generally, RAID storage schemes divide and replicate data among multiple hard disk drives.
When a storage device becomes damaged or otherwise inaccessible, data recovery techniques can be attempted to salvage data from the storage media. Recovery may be necessary as a result of physical damage to the storage device or logical damage to the file system. Recovery techniques include software-based recovery of corrupted data and hardware replacement on a physically damaged disk. In many cases, data recovery is limited to a one-time recovery of files before the storage media is discarded.
While such redundant storage and data recovery techniques have improved the reliability of storage systems, a number of limitations remain, which if overcome, could further improve the reliability and performance of storage systems. For example, RAID storage systems are generally expensive and consume excessive power. In addition, data recovery techniques typically require the corrupted storage device to be mailed to a data recovery service, which can be expensive and inconvenient.
In a conventional read channel, signal processing is typically performed using dedicated hardware. In order to achieve required data rates and maintain low area and power consumption, a dedicated hardware decoder, for example, typically implements a single decoding algorithm with fixed precision. Thus, in the event of a decoding failure by the dedicated decoding block, there are no alternative decoding options and data will be lost.
A need therefore exists for improved techniques for data reliability and endurance. A further need exists for a memory read channel that allows data to be processed in software on a general purpose processor.